# -*-coding:utf-8-*-


# def hello(name):
#     '''
#     这是注释
#     :param name: 传入姓名
#     :return:
#     '''
#     print(f'hello {name}')
#
# hello('cc')
# 帮助文档
# print(hello.__doc__)

# h2 = 'aa'
# hi = hello
# callable() 来判断是否可以被调用
# print(callable(h2))
# print(callable(hi))

# 定义一个函数，实现传入整数的累乘的和


# 参数
# def hello(name,age):
#     print(f'my name is {name},{age} old')
# hello('li','17')
# # 为保证传入函数的正确性
# hello(age=12,name='cc')
'''
默认参数
定义函数的时候 ，可以给定传入参数的默认值，调用函数的时候，可以不提供参数，或者部分提供| 全部提供
1.默认参数必须是不可变的
2.默认参数必须在正常参数之后
'''

# def hello(name='cc',age=15):
#     print(f'my name is {name},{age} old')
# hello('li','17')
# hello(name='tt')
# hello()
from time import sleep

from selenium import webdriver

'''
可变参数
第一次 一个人
第二次 两个人
第三次 三个人

*args 组装元组
'''
# def greeting(greeeting,*vistors):
#     for i in vistors:
#         print(f' {greeeting} {i}')
#
# greeting('hi','cc','tt','yy')

'''
关键字参数
    允许传入0个或者N个任意含参数名的参数，并将这些含参数名的参数自动组装成一个dict
'''
# def print_params(**kwargs):
#     print(type(kwargs))
#     print(kwargs)
# print_params()
# print_params(x=1,y=2)

# def print_person(name,age,**kwargs):
#     print(f'name is {name},age is {age},other：{kwargs}')
#
# print_person('zhansan',20)
# print_person('wagwu',8,mail='163.com')
# print_person('cc',26,mail='163.com',adress='shanghai')

'''
参数的组合
    正常的参数、默认参数、可变参数、关键字参数
    顺序：正-默-变-关
'''

# def func(a,b,c='hello',*args,**kwargs):
#     print(f'a={a} b={b} c={c} args={args},kwargs = {kwargs}')
# func('a','b')
# func('a','b','cc')
# func('a','b','dd','aa','bb')
# func('a','b','dd','aa','bb',x=1,y=2)

'''
实参
形参
'''
'''
一切皆为对象
函数的参数本质上是传递对象的引用
值传递
引用传递
如果函数收到的是一个可变对象（字典、列表）（的引用），就能改变原始对象的值

'''
# def func(a):
#     print(id(a))
#     a.append(1)
#     print(id(a))
#
# x = [2,3]
# print(id(x))
# func(x)
# print(x)
'''
如果函数收到的是一个不可变对象（数字、字符串、元组），就不能直接改变原始对象了
'''
# def fun(a):
#     print(id(a))
#     a+=1
#     print(id(a),a)
#
# x = 1
# print(id(x))
# fun(x)
# print(x)

'''
作用域  变量的有效范围
    局部变量：函数内的变量，         | 如果全局变量名 和 函数内的局部变量名相同，则函数内会屏蔽全局变量
    全局变量：全局都可以使用
        
'''
# a = 1
# def func():
#     # a = 2
#     # # print(a)
#     # # 利用globals 内置函数来读取全局变量
#     # print(a,globals()['a'])
#     # 利用global 这个关键字 来重新绑定全局变量 -- 在函数内声明一个变量（global） 则是全局变量
#     global a
#     a = 2
# func()
# print(a)

''' 函数内定义函数，嵌套'''
# def foo():
#     def bar():
#         print('hello bar()')
#     bar()
# foo()

'''
匿名函数 - 没有名字的函数
之前 def 加函数名字
lambda x : x+1 传入参数是x 返回
'''
# f = lambda x : x+1
# print(type(f),f)
# print(5)
# f = lambda x,y:x-y
# print(f(3,2))

# lambda x:x if x % 2 else None 还原成普通函数
def func(x):
    if x % 2 == 0:
        print('None')
    else:
        print(x)
f = lambda x:x if x % 2 else None
print(f(3))

func(2)




